#include "common.hpp"

//https://subingwen.cn/design-patterns/three-principles/#%E5%BC%80%E6%94%BE%E5%B0%81%E9%97%AD%E5%8E%9F%E5%88%99
// 单一职责原则：一个类或模块只负责一项职责，如一个类只负责一个功能，一个模块只负责一个功能。
// 开闭原则：一个软件实体应当对扩展开放，对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
// 依赖倒置原则：高层模块不应该依赖低层模块，二者都应该依赖其抽象；抽象不应该依赖细节，细节应该依赖抽象。(抽象层来解耦)
// ----- 高内聚,低耦合-----


// 重点-----------------------------
1.抽象类中提供的接口是固定不变的
2.低层模块是抽象类的子类，继承了抽象类的接口，并且可以重写这些接口的行为
3.高层模块想要实现某些功能，调用的是抽象类中的函数接口，并且是通过抽象类的父类指针引用其子类的实例对象（用子类类型替换父类类型），这样就实现了多态。


基于依赖倒转原则将项目的结构换成上图的这种模式之后，低层模块发生变化，对应高层模块是没有任何影响的，这样程序猿的工作量降低了，代码也更容易维护（说白了，依赖倒转原则就是对多态的典型应用）。


